/* Copyright (c) 2004-2024 Peigen.info. All rights reserved. */

package info.peigen.hotpot.business.router.core.domain;


import info.peigen.hotpot.business.router.facade.Channel;
import info.peigen.hotpot.business.router.facade.enums.RouterAction;
import info.peigen.hotpot.common.core.domain.DomainObject;
import info.peigen.hotpot.common.core.enums.Currency;
import info.peigen.hotpot.common.core.lang.money.Money;
import info.peigen.hotpot.common.core.util.IdUtil;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import lombok.experimental.SuperBuilder;

import java.util.Date;

/**
 * <b>(RouterTransLog)</b>
 *
 * @author Peigen
 * @version 1.0.0
 * @since 2021/9/1
 */
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
@Accessors(chain = true)
public class RouterTransLog extends DomainObject {
    /** 交易记录Id */
    @Builder.Default
    String       transLogId = IdUtil.id();
    /** 交易行为 */
    @NotNull
    RouterAction action;
    /** 渠道 */
    @NotNull
    Channel      channel;
    /**
     * 付款方户名
     * 如果Action是Receipt时,则是外部传递过来的真实付款方
     * 如果Action是Withdrawe时,都是真实备付金账户名
     */
    @NotEmpty
    String       payerAccountName;
    /** 付款方账号 */
    @NotEmpty
    String       payerAccountNo;
    /** 付款方币种 */
    @NotNull
    Currency     payerAccountCurrency;
    /**
     * 收款方户名
     * 如果Action是Withdraw时,则是客户真实收款账户
     */
    @NotEmpty
    String       payeeAccountName;
    /** 收款方账号 */
    @NotEmpty
    String       payeeAccountNo;
    /** 收款方账号安全ID */
    @NotEmpty
    String       payeeAccountSecurityId;
    /** 收款方币种 */
    @NotNull
    Currency     payeeAccountCurrency;
    /** 交易金额 */
    @NotNull
    Money        transAmount;
    /** 收费金额 */
    Money    feeAmount;
    /** 收费金额币种 */
    Currency feeCurrency;
    /** 交易日期 */
    @NotNull
    Date   transDate;
    /** 汇率 */
    @NotEmpty
    String rate;
    /** 批次号 */
    String batchNo;
    /** 交易Id */
    @NotEmpty
    String tradeId;
    /** 网关生成的唯一ID */
    String gatewayUniId;
    /** 渠道返回的唯一ID */
    @NotEmpty
    String channelUniId;
    /** 渠道请求原始报文 */
    String requestJson;
    /** 渠道响应原始报文 */
    String responseJson;
    String memo;

}
